var http = require("http");
var url = require("url");
var cheerio = require("cheerio");
var async = require("async");
var eventproxy = require("eventproxy");
var fs = require('fs');
var request  = require("superagent");
var superagent = require('superagent-charset')(request);
var Entities = require('html-entities').XmlEntities;
var entities = new Entities();
var nodeExcel = require('excel-export');
var ep = new eventproxy(),
    urlsArray = [],
    pageUrls = [],
    pageNum = 1,
    length=0;
var data = [];
for (var i = 1; i <= pageNum; i++) {
    if(i == 1){
        pageUrls.push('http://www.99wed.com/hunqing/hunlicehua/');
    }else {
        pageUrls.push('http://www.99wed.com/hunqing/hunlicehua/list_4_'+i+'.html');
    }
}
// 主start程序
function start() {
    function onRequest(req, res) {
        // 轮询 所有文章列表页
        pageUrls.forEach(function(pageUrl) {
            superagent.get(pageUrl)
            .charset() // 不写会自动检测编码
            .end(function(err,pres) {
                // pres.text 里面存储着请求返回的 html 内容，将它传给 cheerio.load 之后
                // 就可以得到一个实现了 jquery 接口的变量，我们习惯性地将它命名为 `$`
                // 剩下就都是利用$ 使用 jquery 的语法了
                if (!pres.text) return;
                var $ = cheerio.load(pres.text);
                var curPageUrls = $('.newsbox .newslist .newsabout .listname a[target=_blank]');
                for (var i = 0; i < curPageUrls.length; i++) {
                    var object={
                        name:curPageUrls.eq(i).text(),
                        url:curPageUrls.eq(i).attr('href'),
                        title:"",
                        introduce:"",
                        html:"",
                        label:[],
                    };
                    urlsArray.push(object);
                    // 相当于一个计数器
                    ep.emit('weddingHtml', object);
                }
            });
        });
        ep.after('weddingHtml',  pageUrls.length*10, function(rows) {
            // 当所有 'weddingHtml' 事件完成后的回调触发下面事件
            // 控制并发数
            var curCount = 0;
            var reptileMove = function(row, callback) {
                //延迟毫秒数
                var delay = parseInt((Math.random() * 30000000) % 1000, 10);
                curCount++;
                console.log('现在的并发数是', curCount, '，正在抓取的是',row.url, '，耗时' + delay + '毫秒');
                superagent.get(row.url)
                    .charset() // 不写会自动检测编码
                    .end(function(err,body) {
                        if (!body.text) return;
                        var $ = cheerio.load(body.text);
                        var viewtitle = $('.main .article .viewtitle').text();  //标题
                        var viewzy = $('.main .article .viewzy').text();    //导读
                        var viewcon =entities.decode( $('.main .article .viewcon').html()); //内容    : 转义编码
                        var par = {
                            "标题": viewtitle,
                            "导读": viewzy,
                            "内容": viewcon,
                        };
                        data.push(par);
                    });
                    setTimeout(function() {
                        curCount--;
                        callback(null, row.url + 'Call back content');
                    }, delay);
            };
            // 使用async控制异步抓取
            // mapLimit(arr, limit, iterator, [callback])
            // 异步回调
            async.mapLimit(rows, 5, function(row, callback) {
                reptileMove(row, callback);
            }, function(err, result) {
                console.log('=====结束进程======');
                fs.writeFile('test.txt',JSON.stringify(data), function(err) {
                    if (err) throw err;
                    console.log('test.txt' + '不存在，被创建了！');
                });
            });

        });
    }
    http.createServer(onRequest).listen(8888);
}

exports.start = start;